home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / message / subcls / leftcap.bas < prev    next >
Encoding:
BASIC Source File  |  1995-05-31  |  5.8 KB  |  180 lines

  1. Option Explicit
  2.  
  3. Type RECT
  4.    left As Integer
  5.    top As Integer
  6.    right As Integer
  7.    bottom As Integer
  8. End Type
  9.  
  10. Declare Function GetActiveWindow Lib "User" () As Integer
  11. Declare Function GetWindowDC Lib "User" (ByVal hWnd As Integer) As Integer
  12. Declare Function ReleaseDC Lib "User" (ByVal hWnd As Integer, ByVal hDC As Integer) As Integer
  13. Declare Sub GetWindowRect Lib "User" (ByVal hWnd As Integer, lpRect As RECT)
  14. Declare Sub SetRect Lib "User" (lpRect As RECT, ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer)
  15. Declare Function GetSystemMetrics Lib "User" (ByVal nIndex As Integer) As Integer
  16. Declare Function GetSysColor Lib "User" (ByVal nIndex As Integer) As Long
  17. Declare Function SetTextColor Lib "GDI" (ByVal hDC As Integer, ByVal crColor As Long) As Long
  18. Declare Function SetBkColor Lib "GDI" (ByVal hDC As Integer, ByVal crColor As Long) As Long
  19. Declare Function GetTextExtent Lib "GDI" (ByVal hDC As Integer, ByVal lpString As String, ByVal nCount As Integer) As Long
  20. Declare Function ExtTextOut Lib "GDI" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal wOptions As Integer, lpRect As Any, ByVal lpString As String, ByVal nCount As Integer, lpDx As Any) As Integer
  21.  
  22. ' ExtTextOut attributes
  23. Global Const ETO_GRAYED = 1
  24. Global Const ETO_OPAQUE = 2
  25. Global Const ETO_CLIPPED = 4
  26.  
  27. ' GetSystemMetrics() codes
  28. Global Const SM_CXSCREEN = 0
  29. Global Const SM_CYSCREEN = 1
  30. Global Const SM_CXVSCROLL = 2
  31. Global Const SM_CYHSCROLL = 3
  32. Global Const SM_CYCAPTION = 4
  33. Global Const SM_CXBORDER = 5
  34. Global Const SM_CYBORDER = 6
  35. Global Const SM_CXDLGFRAME = 7
  36. Global Const SM_CYDLGFRAME = 8
  37. Global Const SM_CYVTHUMB = 9
  38. Global Const SM_CXHTHUMB = 10
  39. Global Const SM_CXICON = 11
  40. Global Const SM_CYICON = 12
  41. Global Const SM_CXCURSOR = 13
  42. Global Const SM_CYCURSOR = 14
  43. Global Const SM_CYMENU = 15
  44. Global Const SM_CXFULLSCREEN = 16
  45. Global Const SM_CYFULLSCREEN = 17
  46. Global Const SM_CYKANJIWINDOW = 18
  47. Global Const SM_MOUSEPRESENT = 19
  48. Global Const SM_CYVSCROLL = 20
  49. Global Const SM_CXHSCROLL = 21
  50. Global Const SM_DEBUG = 22
  51. Global Const SM_SWAPBUTTON = 23
  52. Global Const SM_RESERVED1 = 24
  53. Global Const SM_RESERVED2 = 25
  54. Global Const SM_RESERVED3 = 26
  55. Global Const SM_RESERVED4 = 27
  56. Global Const SM_CXMIN = 28
  57. Global Const SM_CYMIN = 29
  58. Global Const SM_CXSIZE = 30
  59. Global Const SM_CYSIZE = 31
  60. Global Const SM_CXFRAME = 32
  61. Global Const SM_CYFRAME = 33
  62. Global Const SM_CXMINTRACK = 34
  63. Global Const SM_CYMINTRACK = 35
  64. Global Const SM_CMETRICS = 36
  65.  
  66. ' System Colors
  67. Global Const COLOR_SCROLLBAR = 0
  68. Global Const COLOR_BACKGROUND = 1
  69. Global Const COLOR_ACTIVECAPTION = 2
  70. Global Const COLOR_INACTIVECAPTION = 3
  71. Global Const COLOR_MENU = 4
  72. Global Const COLOR_WINDOW = 5
  73. Global Const COLOR_WINDOWFRAME = 6
  74. Global Const COLOR_MENUTEXT = 7
  75. Global Const COLOR_WINDOWTEXT = 8
  76. Global Const COLOR_CAPTIONTEXT = 9
  77. Global Const COLOR_ACTIVEBORDER = 10
  78. Global Const COLOR_INACTIVEBORDER = 11
  79. Global Const COLOR_APPWORKSPACE = 12
  80. Global Const COLOR_HIGHLIGHT = 13
  81. Global Const COLOR_HIGHLIGHTTEXT = 14
  82. Global Const COLOR_BTNFACE = 15
  83. Global Const COLOR_BTNSHADOW = 16
  84. Global Const COLOR_GRAYTEXT = 17
  85. Global Const COLOR_BTNTEXT = 18
  86. Global Const COLOR_INACTIVECAPTIONTEXT = 19
  87. Global Const COLOR_BTNHIGHLIGHT = 20
  88.  
  89. ' WM_SIZE message wParam values
  90. Global Const SIZE_RESTORED = 0
  91. Global Const SIZE_MINIMIZED = 1
  92. Global Const SIZE_MAXIMIZED = 2
  93.  
  94. Sub RefreshCaption (CapText$, Frm As Form, fActive%)
  95.    Dim nRet As Long
  96.    Dim wDC As Integer
  97.    Dim wr As RECT
  98.    Dim xText As Integer
  99.    Dim yText As Integer
  100.    Static xIcon As Integer
  101.    Static yIcon As Integer
  102.    Static xBorder As Integer
  103.    Static yBorder As Integer
  104.    Static BeenHere As Integer
  105.    '
  106.    ' Bail out if form is minimized
  107.    '
  108.    If Frm.WindowState = SIZE_MINIMIZED Then
  109.       Exit Sub
  110.    End If
  111.    '
  112.    ' Retrieve system metrics if first time here
  113.    '
  114.    If Not BeenHere Then
  115.       xIcon = GetSystemMetrics(SM_CXSIZE)
  116.       yIcon = GetSystemMetrics(SM_CYSIZE)
  117.       If Frm.BorderStyle = 1 Then 'FixedSingle
  118.      xBorder = GetSystemMetrics(SM_CXBORDER)
  119.      yBorder = GetSystemMetrics(SM_CYBORDER)
  120.       ElseIf Frm.BorderStyle = 2 Then 'Sizable
  121.      xBorder = GetSystemMetrics(SM_CXFRAME)
  122.      yBorder = GetSystemMetrics(SM_CYFRAME)
  123.       ElseIf Frm.BorderStyle = 3 Then 'FixedDouble
  124.      xBorder = GetSystemMetrics(SM_CXDLGFRAME)
  125.      yBorder = GetSystemMetrics(SM_CYDLGFRAME)
  126.       End If
  127.       BeenHere = True
  128.    End If
  129.    '
  130.    ' Get device context for entire window
  131.    '
  132.    wDC = GetWindowDC(Frm.hWnd)
  133.    '
  134.    ' Determine space required by text
  135.    '
  136.    nRet = GetTextExtent(wDC, CapText, Len(CapText))
  137.    xText = WordLo(nRet)
  138.    yText = WordHi(nRet)
  139.    '
  140.    ' Calc rectangle to put text into
  141.    '
  142.    Call GetWindowRect(Frm.hWnd, wr)
  143.    wr.right = wr.right - wr.left - (xIcon * 2) - xBorder - 2
  144.    wr.left = xBorder + xIcon + 4
  145.    wr.top = yBorder + ((yIcon - yText) \ 2)
  146.    wr.bottom = yBorder + yIcon
  147.    '
  148.    ' Retrieve and set colors to use for titlebar and text
  149.    ' Set background drawing mode
  150.    '
  151.    If fActive Then
  152.       nRet = SetBkColor(wDC, GetSysColor(COLOR_ACTIVECAPTION))
  153.       nRet = SetTextColor(wDC, GetSysColor(COLOR_CAPTIONTEXT))
  154.    Else
  155.       nRet = SetBkColor(wDC, GetSysColor(COLOR_INACTIVECAPTION))
  156.       nRet = SetTextColor(wDC, GetSysColor(COLOR_INACTIVECAPTIONTEXT))
  157.    End If
  158.    '
  159.    ' Draw the caption text
  160.    '
  161.    nRet = ExtTextOut(wDC, wr.left, wr.top, ETO_CLIPPED Or ETO_OPAQUE, wr, CapText, Len(CapText), ByVal 0&)
  162.    '
  163.    ' Release window device context
  164.    '
  165.    nRet = ReleaseDC(Frm.hWnd, wDC)
  166. End Sub
  167.  
  168. Function WordHi (LongIn&) As Integer
  169.    WordHi = (LongIn And &HFFFF0000) \ &H10000
  170. End Function
  171.  
  172. Function WordLo (LongIn&) As Integer
  173.    If (LongIn And &HFFFF&) > &H7FFF Then
  174.       WordLo = (LongIn And &HFFFF&) - &H10000
  175.    Else
  176.       WordLo = LongIn And &HFFFF&
  177.    End If
  178. End Function
  179.  
  180.